优秀总结: 老师,之前我在初学

🔍 溯源 ✍️ Jack | 📅 2025-05-04 | 👍 3 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/HAL库 #技术/中断 #质量/普通

原帖 | Jack | 2025-05-04 18:48 | 👍3 | 阅读约1

优秀总结:
老师,之前我在初学单片机的时候会犯的一个错误就是,在中断处理函数中调用HAL_Delay函数进行延时,这样为什么是错的呢,我思考了一下,原因大概是这样的:“一般来说SysTick定时中断的优先级是比较低的,当进入其他高优先级的中断服务程序中、调用HAL_Delay的时候,由于HAL_Delay的实现原理是比较当前tick值和Start tick值,也就是用当前的uwTick去减开始时的uwTick,判断这个时间差是否达到了预设延时时间,而uwTick的递增是需要进入低优先级的定时中断的,这就相当于在一个高优先级的中断处理函数中等待一个低优先级的中断处理函数的执行(uwTick增长到预设值,不进定时中断uwTick无法递增),由于低优先级无法去嵌套高优先级,所以这样就进入了一个死锁状态(HAL 与 FreeRTOS 时基分离的讨论见 优秀总结: 老师,是不是hal)”


相关笔记